home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / lib / rcscripts / net.modules.d / essidnet < prev    next >
Text File  |  2006-04-25  |  3KB  |  116 lines

  1. # Copyright (c) 2004-2005 Gentoo Foundation
  2. # Distributed under the terms of the GNU General Public License v2
  3. # $Header$
  4.  
  5. # Contributed by Roy Marples (uberlord@gentoo.org)
  6. # Many thanks to all the people in the Gentoo forums for their ideas and
  7. # motivation for me to make this and keep on improving it
  8.  
  9. # Load our config if it exists
  10. [[ -f $(add_suffix "/etc/conf.d/wireless" ) ]] \
  11.     && source $(add_suffix "/etc/conf.d/wireless" )
  12.  
  13. # void essidnet_depend(void)
  14. #
  15. # Sets up the dependancies for the module
  16. essidnet_depend() {
  17.     before interface
  18.     after wireless
  19.     installed wireless
  20. }
  21.  
  22. # bool essidnet_check_installed(void)
  23. #
  24. # Always returns 0 as we are "installed" by wireless in the depend function
  25. essidnet_check_installed() {
  26.     return 0
  27. }
  28.  
  29. # char* essidnet_provides(void)
  30. #
  31. # Returns a string to change module definition for starting up
  32. essidnet_provides() {
  33.     echo "essidnet"
  34. }
  35.  
  36. # bool essidnet_check_depends(void)
  37. #
  38. # Checks to see if we have the needed functions
  39. essidnet_check_depends() {
  40.     local f
  41.  
  42.     for f in interface_variable wireless_check_extensions wireless_get_essid wireless_get_ap_mac_address; do
  43.         [[ $( type -t ${f} ) == function ]] && continue
  44.         eerror "essidnet: missing required function ${f}\n"
  45.         return 1
  46.     done
  47.  
  48.     return 0
  49. }
  50.  
  51. # bool essidnet_start(char *iface)
  52. #
  53. # All interfaces and module scripts expose modulename_get_vars
  54. # which returns a space seperated list of user configuration variables
  55. # We can override each variable here from a given ESSID or the MAC
  56. # of the AP connected to. MAC configuration takes precedence
  57. # Always returns 0
  58. essidnet_pre_start() {
  59.     local iface=${1} ifvar=$( interface_variable ${1} )
  60.  
  61.     wireless_check_extensions ${iface} || return 0
  62.  
  63.     local mod func evars evar vars x i mvars mac=$( wireless_get_ap_mac_address ${iface} )
  64.     local ESSID=$( wireless_get_essid ${iface} )
  65.     local essid
  66.     LC_ALL=C essid=${ESSID//[![:word:]]/_}
  67.     mac=${mac//:/}
  68.  
  69.     vebegin "Configuring ${iface} for \"${ESSID//\\\\/\\\\}\"" 2>/dev/null
  70.  
  71.     for mod in ${MODULES[@]}; do
  72.         func="${mod}_get_vars"
  73.         if [[ $(type -t ${func}) == function ]]; then
  74.             evars=( $( ${func} ${essid} ) )
  75.             mvars=( $( ${func} ${mac} ) )
  76.             vars=( $( ${func} ${ifvar} ) )
  77.             for ((i = 0; i<${#mvars[@]}; i++)); do
  78.                 eval x=( \"\$\{mac_${mvars[i]}\[@\]\}\" )
  79.                 [[ -z ${x} ]] && eval x=( \"\$\{${evars[i]}\[@\]\}\" )
  80.                 [[ -n ${x} ]] && eval "${vars[i]}=( "\"\$\{x\[@\]\}\"" )"
  81.             done
  82.         fi
  83.     done
  84.  
  85.     # Nameserver setup for the essid if required
  86.     local -a nameservers
  87.     eval nameservers=( \"\$\{mac_dns_servers_${mac}\[@\]\}\" )
  88.     [[ -z ${nameservers} ]] && eval nameservers=( \"\$\{dns_servers_${essid}\[@\]\}\" )
  89.     if [[ -n ${nameservers} ]]; then
  90.         # Make a backup of the origional file if necessary
  91.         [[ -f /etc/resolv.conf ]] && mv /etc/resolv.conf /etc/resolv.conf.sv
  92.  
  93.         echo "# Generated by net-scripts essidnet module" > /etc/resolv.conf
  94.         chmod 644 /etc/resolv.conf
  95.  
  96.         eval x=\"\$\{mac_dns_domain_${mac}\}\"
  97.         [[ -z ${x} ]] && eval x=\"\$\{dns_domain_${essid}\}\"
  98.         [[ -n ${x} ]] && echo "domain ${x}" >> /etc/resolv.conf
  99.  
  100.         for x in ${nameservers[@]}; do
  101.             echo "nameserver ${x}" >> /etc/resolv.conf
  102.         done
  103.  
  104.         eval x=\"\$\{mac_dns_search_domains_${mac}\}\"
  105.         [[ -z ${x} ]] && eval x=\"\$\{dns_search_domains_${essid}\}\"
  106.         [[ -n ${x} ]] && echo "search ${x}" >> /etc/resolv.conf
  107.     fi
  108.  
  109.     # Backwards compat for old gateway var
  110.     eval x=\"\$\{gateway_${essid}\}\"
  111.     [[ -n ${x} ]] && gateway="${iface}/${x}"
  112.  
  113.     veend 0 2>/dev/null
  114.     return 0
  115. }
  116.